/*
 * @lc app=leetcode.cn id=27 lang=javascript
 *
 * [27] 移除元素
 */

// @lc code=start
/**
 * @param {number[]} nums
 * @param {number} val
 * @return {number}
 */
// 对撞指针
// [l,r]左闭右闭
// 左指针一直去发掘有为val,直到l和r相交
// 通过r指针减少长度
// 没有为val为止
var removeElement = function(nums, val) {
  let l = 0
  let r = nums.length - 1
  while (l <= r) {
    if (nums[l] === val) {
      nums[l] = nums[r]
      r--
    } else {
      l++
    }
  }
  return l
};
// @lc code=end

// 快慢指针
// 如果fast遇到val,就直接跳过并且slow也不++
// 就相当于把不为val的值都丢到前面去了。
// var removeElement = function(nums, val) {
//   let slow = 0
//   let fast = 0
//   while (fast < nums.length) {
//     if (nums[fast] !== val) {
//       nums[slow] = nums[fast]
//       slow++
//     }
//     fast++
//   }
//   return slow
// };